{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1a638e12",
   "metadata": {},
   "source": [
    "# DatetimeOutputParser\n",
    "\n",
    "`DatetimeOutputParser` 는 LLM의 출력을 `datetime` 형식으로 파싱하는 데 사용할 수 있습니다.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f203512",
   "metadata": {},
   "outputs": [],
   "source": [
    "from dotenv import load_dotenv\n",
    "\n",
    "load_dotenv()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f1b62ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "# LangSmith 추적을 설정합니다. https://smith.langchain.com\n",
    "# !pip install langchain-teddynote\n",
    "from langchain_teddynote import logging\n",
    "\n",
    "# 프로젝트 이름을 입력합니다.\n",
    "logging.langsmith(\"CH03-OutputParser\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24afb9c8",
   "metadata": {},
   "source": [
    "**참고**\n",
    "\n",
    "| 형식 코드 | 설명                | 예시          |\n",
    "|------------|---------------------|---------------|\n",
    "| %Y         | 4자리 연도          | 2024          |\n",
    "| %y         | 2자리 연도          | 24            |\n",
    "| %m         | 2자리 월            | 07            |\n",
    "| %d         | 2자리 일            | 04            |\n",
    "| %H         | 24시간제 시간       | 14            |\n",
    "| %I         | 12시간제 시간       | 02            |\n",
    "| %p         | AM 또는 PM          | PM            |\n",
    "| %M         | 2자리 분            | 45            |\n",
    "| %S         | 2자리 초            | 08            |\n",
    "| %f         | 마이크로초 (6자리)  | 000123        |\n",
    "| %z         | UTC 오프셋          | +0900         |\n",
    "| %Z         | 시간대 이름         | KST           |\n",
    "| %a         | 요일 약어           | Thu           |\n",
    "| %A         | 요일 전체           | Thursday      |\n",
    "| %b         | 월 약어             | Jul           |\n",
    "| %B         | 월 전체             | July          |\n",
    "| %c         | 전체 날짜와 시간     | Thu Jul  4 14:45:08 2024 |\n",
    "| %x         | 전체 날짜           | 07/04/24      |\n",
    "| %X         | 전체 시간           | 14:45:08      |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eef9dedf",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.output_parsers import DatetimeOutputParser\n",
    "from langchain.prompts import PromptTemplate\n",
    "from langchain_openai import ChatOpenAI\n",
    "\n",
    "# 날짜 및 시간 출력 파서\n",
    "output_parser = DatetimeOutputParser()\n",
    "output_parser.format = \"%Y-%m-%d\"\n",
    "\n",
    "# 사용자 질문에 대한 답변 템플릿\n",
    "template = \"\"\"Answer the users question:\\n\\n#Format Instructions: \\n{format_instructions}\\n\\n#Question: \\n{question}\\n\\n#Answer:\"\"\"\n",
    "\n",
    "prompt = PromptTemplate.from_template(\n",
    "    template,\n",
    "    partial_variables={\n",
    "        \"format_instructions\": output_parser.get_format_instructions()\n",
    "    },  # 지침을 템플릿에 적용\n",
    ")\n",
    "\n",
    "# 프롬프트 내용을 출력\n",
    "prompt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdafee0d",
   "metadata": {},
   "source": [
    "체인을 생성합니다.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad8b9123",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Chain 을 생성합니다.\n",
    "chain = prompt | ChatOpenAI() | output_parser\n",
    "\n",
    "# 체인을 호출하여 질문에 대한 답변을 받습니다.\n",
    "output = chain.invoke({\"question\": \"Google 이 창업한 연도\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37c9f7ba",
   "metadata": {},
   "source": [
    "결과를 출력합니다.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b5c1d847",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 결과를 문자열로 변환\n",
    "output.strftime(\"%Y-%m-%d\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py-test",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
